/* eslint-disable */
import Layers from "../../lang/layers";
import FormInput from './form-input'

/**
 * 默认输入框
 */
class Default extends FormInput {
}

/**
 * 文本框
 */
class TextView extends FormInput {

    defaultValue() {
        return '';
    }

    parse(val) {
        return Layers.caseToString(val);
    }

    format(val) {
        return val;
    }
}

/**
 * 数字
 */
class Number extends FormInput {
    defaultValue() {
        return '';
    }

    parse(val) {
        if (Layers.isEmpty(val)) {
            return '';
        } else {
            try {
                return Layers.caseToNumber(val);
            } catch (ignore) {
                return val;
            }
        }
    }

    format(val) {
        if (Layers.isEmpty(val)) {
            return undefined;
        } else {
            try {
                return Layers.caseToNumber(val);
            } catch (ignore) {
                return val;
            }
        }
    }
}

/**
 * 文本域
 */
class Textarea extends FormInput {
    defaultValue() {
        return '';
    }

    parse(val) {
        return Layers.caseToString(val);
    }

    format(val) {
        return val;
    }
}

/**
 * 开关
 */
class Switch extends FormInput {
    defaultValue() {
        return false;
    }

    parse(val) {
        return Layers.caseToBoolean(val);
    }

    format(val) {
        return val;
    }
}

/**
 * 单选框
 */
class Checkbox extends FormInput {
    defaultValue() {
        return false;
    }

    parse(val) {
        return Layers.caseToBoolean(val);
    }

    format(val) {
        return val;
    }
}

/**
 * 日期选择
 */
class DatePicker extends FormInput {
    defaultValue() {
        return '';
    }

    parse(val) {
        return val;
    }

    format(val) {
        return Layers.text().formatDate(val);
    }
}

/**
 * 高精度日期选择
 */
class DatetimePicker extends FormInput {
    defaultValue() {
        return '';
    }

    parse(val) {
        return val;
    }

    format(val) {
        return Layers.text().formatDatetime(val);
    }
}

/**
 * 日期范围选择
 */
class DateRange extends FormInput {
    defaultValue() {
        return [];
    }

    parse(val) {
        if (Layers.isBlank(val)) {
            return val;
        } else if (typeof val === 'string') {
            return val.split('~')
        } else {
            return val;
        }
    }

    format(val) {
        if (Layers.isEmpty(val)) {
            return [];
        } else {
            return [Layers.text().formatDate(val[0]), Layers.text().formatDate(val[1])];
        }
    }
}

/**
 * 高精度日期范围选择
 */
class DatetimeRange extends FormInput {
    defaultValue() {
        return [];
    }

    parse(val) {
        if (Layers.isBlank(val)) {
            return val;
        } else if (Array.isArray(val)) {
            return val;
        } else if (typeof val === 'string') {
            return val.split('~')
        } else {
            return val;
        }
    }

    format(val) {
        if (Layers.isEmpty(val)) {
            return [];
        } else {
            return [Layers.text().formatDatetime(val[0]), Layers.text().formatDatetime(val[1])];
        }
    }
}

/**
 * 图片上传
 */
class Image extends FormInput {
    defaultValue() {
        return '';
    }

    parse(val) {
        return val;
    }

    format(val) {
        return Layers.caseToString(val);
    }
}

/**
 * 文件上传
 */
class File extends FormInput {
    defaultValue() {
        return '';
    }

    parse(val) {
        return val;
    }

    format(val) {
        return Layers.caseToString(val);
    }
}

/**
 * 文件上传
 */
class Uploader extends FormInput {
    defaultValue() {
        // 文件上传组件，不会有默认值的情况
        return undefined;
    }

    parse(val) {
        return val;
    }

    format(val) {
        return val;
    }
}

/**
 * 富文本框
 */
class Editor extends FormInput {
    defaultValue() {
        return '';
    }

    parse(val) {
        return val;
    }

    format(val) {
        return val;
    }
}

/**
 * 单选树
 */
class SelectTree extends FormInput {
    defaultValue() {
        return '';
    }

    parse(val) {
        return val;
    }

    format(val) {
        return val;
    }
}

/**
 * 复选树
 */
class CheckTree extends FormInput {
    defaultValue() {
        return [];
    }

    parse(val) {
        return Layers.caseToArray(val);
    }

    format(val) {
        return Layers.caseToString(val);
    }
}

/**
 * 下拉框
 */
class Select extends FormInput {
    defaultValue() {
        return '';
    }

    parse(val) {
        return val;
    }

    format(val) {
        return val;
    }
}

/**
 * 单选框
 */
class RadioGroup extends FormInput {
    defaultValue() {
        return '';
    }

    parse(val) {
        return val;
    }

    format(val) {
        return val;
    }
}

/**
 * 复选框
 */
class CheckboxGroup extends FormInput {

    constructor() {
        super();
    }

    defaultValue() {
        return [];
    }

    parse(val) {
        if (Layers.isEmpty(val)) {
            return [];
        } else {
            return Layers.caseToArray(val);
        }
    }

    format(val) {
        if (Layers.isEmpty(val)) {
            return undefined;
        } else {
            return Layers.caseToString(val);
        }
    }
}

export default {
    // 文本输入
    TextView,
    Number,
    Textarea,
    // 日期选择
    DatePicker,
    DateRange,
    // 文件上传
    Image,
    File,
    Uploader,
    // 富文本框
    Editor,
    // 树形选择
    CheckTree,
    SelectTree,
    // 单选
    Switch,
    Checkbox,
    // 下拉、复选
    Select,
    RadioGroup,
    CheckboxGroup
}
